package com.hfb.mashibing.alip8.juc.c020_01_interview;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 面试题（淘宝？）
 * 实现一个容器，提供2个方法：add，size
 * 写2个线程，线程1添加10个袁术到容器中，
 * 线程2实现监控元数个数。当个数为5时线程2 提出提示并退出。
 *
 * 仔细分析下面的程序能完成任务吗?
 * 答：不行，（多线程）
 * 1、size线程间不可见！
 * 2、add不是同步方法！
 */
public class T01_WithoutVolatile {
    List lis = new ArrayList();

    public void add(Object o) {
        lis.add(o);
    }
    public int size() {
        return lis.size();
    }

    public static void main(String[] args) {
        T01_WithoutVolatile o = new T01_WithoutVolatile();
        new Thread(()->{
            for (int i=0;i<10;i++) {
                o.add(new Object());
                System.out.println("add "+i);

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "t1").start();

        new Thread(()->{
            while (true) {
                if (o.size() == 5) {
                    System.out.println("5 个够了");
                    break;
                }
            }
            System.out.println("t2 结束🔚 ");
        }, "t2").start();


    }
}
